import re

from bs4 import BeautifulSoup

# 构造一个HTML页面
html = """
<!DOCTYPE html>
<!--STATUS OK-->
<html>
 <head>
  <meta content="text/html;charset=utf-8" http-equiv="content-type"/>
  <meta content="IE=Edge" http-equiv="X-UA-Compatible"/>
  <meta content="always" name="referrer"/>
  <link href="https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css" rel="stylesheet" type="text/css"/>
  <title>百度一下，你就知道 </title>
 </head>
 <body link="#0000cc">
  <div id="wrapper">
   <div id="head">
    <div class="head_wrapper">
     <div id="u1">
      <a class="mnav" href="http://news.baidu.com" name="tj_trnews">
       新闻 </a>
      <a class="mnav" href="https://www.hao123.com" name="tj_trhao123">
       hao123 </a>
      <a class="mnav" href="http://map.baidu.com" name="tj_trmap">
       地图 </a>
      <a class="mnav" href="http://v.baidu.com" name="tj_trvideo">
       视频 </a>
      <a class="mnav" href="http://tieba.baidu.com" name="tj_trtieba">
       贴吧 </a>
      <a class="bri" href="//www.baidu.com/more/" name="tj_briicon" style="display: block;">
       更多产品 </a>
     </div>
    </div>
   </div>
  </div>
 </body>
</html>

"""

bs = BeautifulSoup(html, 'html.parser')

# 缩进格式
print(bs.prettify())

# 获取title标签的所有内容
print(bs.title)

# 获取title标签的名称
print(bs.title.name)

# 获取title标签的文本内容
print(bs.title.string)

# 获取head标签的所有内容
print(bs.head)

# 获取第一个div标签中的所有内容
print(bs.div)

# 获取第一个div标签的id的值
print(bs.div['id'])

# 获取第一个a标签中的所有内容
print(bs.a)

# 获取所有的a标签中的所有内容
print(bs.find_all('a'))

# 获取id="u1"
print(bs.find(id='u1'))

# 获取所有的a标签，并遍历打印a标签中的href的值
for item in bs.find_all('a'):
    print(item.get('href'))
    print(item['href'])

# 获取所有的a标签，并遍历打印a标签的文本值
for item in bs.find_all('a'):
    print(item.text)

# 字符串过滤标签
a_list = bs.find_all('a')
print(a_list)

# 正则过滤标签
include_a_list = bs.find_all(re.compile('a'))
print(include_a_list)

# 列表过滤
t_list = bs.find_all(['a', 'link'])
print(t_list)


def name_is_exists(tag):
    return tag.has_attr("name")


# 传入一个方法，根据方法来匹配
def_list = bs.find_all(name_is_exists)
print(def_list)

# 查询id=head的Tag
t_list = bs.find_all(id='head')
print(t_list)

# 查询href属性包含ss1.bdstatic.com的Tag
t_list = bs.find_all(href=re.compile("http://news.baidu.com"))
print(t_list)

# 查询所有包含class的Tag(注意：class在Python中属于关键字，所以加_以示区别)
t_list = bs.find_all(class_=True)
print(t_list)

# attrs参数过滤
t_list = bs.find_all(attrs={'content': "always"})
print(t_list)

# txt参数
t_list = bs.find_all(text='hao123')
for item in t_list:
    print(item)

t_list = bs.find_all(text=['hao123', '地图', '贴吧'])
for item in t_list:
    print(item)

t_list = bs.find_all(text=re.compile('\d'))
for item in t_list:
    print(item)
